From 06ad134876fab771a9becb84cb176f7358bf34c5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 26 Dec 2017 23:32:49 -0500 Subject: [PATCH] Add an unrealize function to GtkLabel We need to drpo the primary clipboard when the label is getting unrealized while holding it. This fixes a crash in the accessibility-dump test. --- gtk/gtklabel.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 6dfb0f07ad..8dfd6bd545 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -414,6 +414,7 @@ static gboolean gtk_label_focus (GtkWidget *widget, GtkDirectionType direction); static void gtk_label_realize (GtkWidget *widget); +static void gtk_label_unrealize (GtkWidget *widget); static void gtk_label_unmap (GtkWidget *widget); static void gtk_label_motion (GtkEventControllerMotion *controller, @@ -599,6 +600,7 @@ gtk_label_class_init (GtkLabelClass *class) widget_class->query_tooltip = gtk_label_query_tooltip; widget_class->snapshot = gtk_label_snapshot; widget_class->realize = gtk_label_realize; + widget_class->unrealize = gtk_label_unrealize; widget_class->unmap = gtk_label_unmap; widget_class->hierarchy_changed = gtk_label_hierarchy_changed; widget_class->display_changed = gtk_label_display_changed; @@ -4147,6 +4149,21 @@ gtk_label_realize (GtkWidget *widget) gtk_label_set_selectable_hint (label); } +static void +gtk_label_unrealize (GtkWidget *widget) +{ + GtkLabel *label = GTK_LABEL (widget); + GtkLabelPrivate *priv = gtk_label_get_instance_private (label); + GdkClipboard *clipboard; + + clipboard = gtk_widget_get_primary_clipboard (widget); + if (priv->select_info && + gdk_clipboard_get_content (clipboard) == priv->select_info->provider) + gdk_clipboard_set_content (clipboard, NULL); + + GTK_WIDGET_CLASS (gtk_label_parent_class)->unrealize (widget); +} + static void gtk_label_unmap (GtkWidget *widget) { -- 2.30.2